Jackson-এ Unknown Properties Handling একটি গুরুত্বপূর্ণ বিষয়, বিশেষত যখন JSON ডেটা অপ্রত্যাশিত বা অজানা ফিল্ড সম্বলিত থাকে। যদি Jackson JSON ডেটা থেকে অজানা ফিল্ডগুলোকে অগ্রাহ্য না করে, তবে UnrecognizedPropertyException ঘটতে পারে।
Jackson এ JSON ডেটার সাথে সামঞ্জস্য রাখতে এবং অজানা প্রোপার্টি সমাধান করতে কয়েকটি অ্যানোটেশন এবং কনফিগারেশন রয়েছে। নিচে @JsonIgnoreProperties এবং @JsonAnySetter অ্যানোটেশন ব্যবহার করে কীভাবে অজানা প্রোপার্টি হ্যান্ডল করা যায় তা বিস্তারিত আলোচনা করা হলো।
1. @JsonIgnoreProperties Annotation
@JsonIgnoreProperties অ্যানোটেশন ব্যবহার করা হয়, যখন JSON ডেটার মধ্যে অজানা প্রোপার্টি থাকে এবং আপনি সেগুলোকে JSON Serialization/Deserialization-এ অগ্রাহ্য করতে চান।
ব্যবহার:
ignoreUnknown = true: Jackson অজানা প্রোপার্টিগুলো উপেক্ষা করবে।
Java Class Example:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
private int id;
private String name;
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Deserialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonIgnorePropertiesExample {
public static void main(String[] args) throws Exception {
String json = "{\"id\":1, \"name\":\"Rahim\", \"email\":\"rahim@example.com\"}";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
System.out.println("User ID: " + user.getId());
System.out.println("User Name: " + user.getName());
}
}
Output:
User ID: 1
User Name: Rahim
এখানে, email ফিল্ডটি User ক্লাসে উপস্থিত না হলেও Jackson সেটি উপেক্ষা করবে কারণ @JsonIgnoreProperties(ignoreUnknown = true) ব্যবহার করা হয়েছে।
2. @JsonAnySetter Annotation
@JsonAnySetter অ্যানোটেশন ব্যবহার করা হয়, যখন আপনি JSON ডেটার অজানা ফিল্ডগুলোকে একটি Map এ সেট করতে চান। এটি খুবই উপকারী যখন JSON ডেটাতে অতিরিক্ত প্রোপার্টি থাকতে পারে, এবং আপনি সেগুলোকে একটি ডাইনামিক ডেটা স্ট্রাকচারে সংরক্ষণ করতে চান।
ব্যবহার:
- JSON ডেটার অজানা ফিল্ডগুলো একটি
Map<String, Object>এ সেট করা হয়।
Java Class Example:
import com.fasterxml.jackson.annotation.JsonAnySetter;
import java.util.HashMap;
import java.util.Map;
public class User {
private int id;
private String name;
private Map<String, Object> otherProperties = new HashMap<>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@JsonAnySetter
public void setOtherProperties(String key, Object value) {
this.otherProperties.put(key, value);
}
public Map<String, Object> getOtherProperties() {
return otherProperties;
}
}
Deserialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonAnySetterExample {
public static void main(String[] args) throws Exception {
String json = "{\"id\":1, \"name\":\"Rahim\", \"email\":\"rahim@example.com\", \"address\":\"123 Street\"}";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
System.out.println("User ID: " + user.getId());
System.out.println("User Name: " + user.getName());
System.out.println("Other Properties: " + user.getOtherProperties());
}
}
Output:
User ID: 1
User Name: Rahim
Other Properties: {email=rahim@example.com, address=123 Street}
এখানে, email এবং address প্রোপার্টি User ক্লাসে নেই, তবে এগুলো otherProperties মেপে সংরক্ষণ করা হয়েছে।
3. ObjectMapper Configuration
Jackson ObjectMapper-এ FAIL_ON_UNKNOWN_PROPERTIES কনফিগারেশন সেট করে আপনি অজানা প্রোপার্টি গুলি উপেক্ষা করতে পারেন।
Java Class Example:
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ObjectMapperIgnoreUnknown {
public static void main(String[] args) throws Exception {
String json = "{\"id\":1, \"name\":\"Rahim\", \"email\":\"rahim@example.com\"}";
ObjectMapper mapper = new ObjectMapper();
// Configure ObjectMapper to ignore unknown properties
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
User user = mapper.readValue(json, User.class);
System.out.println("User ID: " + user.getId());
System.out.println("User Name: " + user.getName());
}
}
Output:
User ID: 1
User Name: Rahim
এখানে, email ফিল্ডটি User ক্লাসে উপস্থিত না হলেও Jackson সেটি উপেক্ষা করে এবং কোডটি সঠিকভাবে কাজ করে।
@JsonIgnoreProperties এবং @JsonAnySetter এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | @JsonIgnoreProperties | @JsonAnySetter |
|---|---|---|
| ফোকাস | অজানা প্রোপার্টি গুলি উপেক্ষা করা | অজানা প্রোপার্টি গুলি একটি Map এ সেট করা |
| ব্যবহার | সমস্ত অজানা প্রোপার্টি উপেক্ষা করতে | JSON এর অজানা প্রোপার্টি একটি ডাইনামিক স্ট্রাকচারে সংরক্ষণ করা |
| ক্যাপচার | শুধুমাত্র অজানা প্রোপার্টি উপেক্ষা করা হয় | অজানা প্রোপার্টি Map বা List-এ ক্যাপচার করা হয় |
@JsonIgnorePropertiesব্যবহৃত হয় যখন আপনি JSON থেকে অজানা প্রোপার্টি উপেক্ষা করতে চান, যেমন পুরনো বা অবাঞ্ছিত ফিল্ড।@JsonAnySetterব্যবহৃত হয় যখন আপনি JSON এর অজানা ফিল্ডগুলোকে একটি ডাইনামিক ডেটা স্ট্রাকচার (যেমন:Map) এ সংরক্ষণ করতে চান।ObjectMapperকনফিগারেশনের মাধ্যমে আপনি JSON Parsing-এ অজানা প্রোপার্টি গুলি উপেক্ষা করতে পারেন।
এই অ্যানোটেশনগুলি আপনাকে JSON ডেটা প্রক্রিয়াকরণের ক্ষেত্রে আরও নমনীয়তা এবং সঠিকতা প্রদান করে।
Read more